package com.nuoniu.sibanyun.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nuoniu.sibanyun.entity.SysCompany;
import com.nuoniu.sibanyun.entity.SysOffice;
import com.nuoniu.sibanyun.entity.dto.SysOfficeDto;
import com.nuoniu.sibanyun.entity.vo.OfficeTreeData;

import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * 组织机构表 服务类
 * </p>
 *
 * @author baiqiang
 * @since 2020-05-25
 */
public interface ISysOfficeService extends IService<SysOffice> {

    /**
     * 分页获取机构列表
     * @author 小啊刚
     * @date 2020/5/29
     */
    List<OfficeTreeData> getOfficeTreeDataList(SysOfficeDto sysOfficeDto);

    /**
     * 获取数据范围 机构id
     * @author 小啊刚
     * @date 2020/5/29
     */
    List<String> checkOfficeList(Long roleId, String type);

    /**
     * 获取机构列表
     * @author 小啊刚
     * @date 2020/5/30
     */
    List<SysOffice> getOfficeList(SysOfficeDto sysOfficeDto);

    /**
     * 物理删除机构
     * @author 小啊刚
     * @date 2020/6/1
     */
    void deleteSysOffice(Long id, Long parentId);

    /**
     * 修改末级状态
     * @author 小啊刚
     * @date 2020/6/12
     */
    void updateLevel(Integer parentId, Integer leaf);

    /**
     * 修改公司名称
     * @author 小啊刚
     * @date 2020-08-04
     */
    void updateCompanyName(SysCompany company);

    /**
     * 同步修改机构名称
     * @author 小啊刚
     * @date 2020-08-05
     */
    void updateOfficeName(SysOffice sysOffice);

    /**
     * 修改
     * @author 小啊刚
     * @date 2020-08-18
     */
    List<SysOffice> getLowerLevelOffice(Long id);


    void updateParentIds(Long id, String parentIds);

    void updateChildrenParentIds(SysOffice sysOffice, SysOffice parentOffice);

    Set<String> findAllOffices(Set<String> officeIds);

    Boolean checkCode(SysOffice sysOffice, SysOffice parentOffice);

    /**
     * 根据code获取机构
     * @author 小啊刚
     * @date 2020-11-23
     */
    SysOffice getByCode(String officeCode);

    /**
     * 获取分页列表
     * @author 小啊刚
     * @date 2021-01-04
     */
    Page<SysOffice> pageList(Page page, SysOfficeDto sysOfficeDto);

    /**
     * 获取权限部门范围
     * @return
     */
    List<OfficeTreeData> getDataScopeOffice();

    /**
     * 保存机构
     * @author 小啊刚
     * @date 2021-06-24
     */
    void saveOffice(SysOffice sysOffice);
}
